home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / doc / libcairo-perl / examples / png / stars.pl < prev    next >
Encoding:
Perl Script  |  2005-07-12  |  1.1 KB  |  73 lines

  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use Cairo;
  6.  
  7. use constant
  8. {
  9.     WIDTH => 600,
  10.     HEIGHT => 275,
  11.     M_PI => 3.14159265,
  12. };
  13.  
  14. {
  15.     my $surf = Cairo::ImageSurface->create ('argb32', WIDTH, HEIGHT);
  16.     my $cr = Cairo::Context->create ($surf);
  17.  
  18.     $0 =~ /(.*)\.pl/;
  19.     my $out = "$1.png";
  20.  
  21.     $cr->rectangle (0, 0, WIDTH, HEIGHT);
  22.     $cr->set_source_rgb (1, 1, 1);
  23.     $cr->fill;
  24.  
  25.     draw_stars ($cr, WIDTH, HEIGHT);
  26.  
  27.     $cr->show_page;
  28.  
  29.     $surf->write_to_png ($out);
  30. }
  31.  
  32. sub star_path
  33. {
  34.     my ($cr) = @_;
  35.  
  36.     my $theta = 4 * M_PI / 5.0;
  37.  
  38.     $cr->move_to (0, 0);
  39.     for (my $i = 0; $i < 4; $i++)
  40.     {
  41.         $cr->rel_line_to (1.0, 0);
  42.         $cr->rotate ($theta);
  43.     }
  44.     $cr->close_path;
  45. }
  46.  
  47. sub draw_stars
  48. {
  49.     my ($cr, $width, $height) = @_;
  50.  
  51.     $cr->set_source_rgb (0, 0, 0);
  52.  
  53.     $cr->save;
  54.     {
  55.         $cr->translate (5, $height / 2.6);
  56.         $cr->scale ($height, $height);
  57.         star_path ($cr);
  58.         $cr->set_fill_rule ('winding');
  59.         $cr->fill;
  60.     }
  61.     $cr->restore;
  62.  
  63.     $cr->save;
  64.     {
  65.         $cr->translate ($width - $height - 5, $height / 2.6);
  66.         $cr->scale ($height, $height);
  67.         star_path ($cr);
  68.         $cr->set_fill_rule ('even-odd');
  69.         $cr->fill;
  70.     }
  71.     $cr->restore;
  72. }
  73.